/*
 * PathSolverAlgorithm.h
 *
 *  Created on: Sep 26, 2009
 *      Author: jbarreneche
 */

#ifndef PATHSOLVERALGORITHM_H_
#define PATHSOLVERALGORITHM_H_

#include "util/LinkedList.h"
#include "core/Vertex.h"
#include "core/path/Path.h"
#include "exceptions/OutOfReachException.h"

using namespace util;

namespace path {

class PathSolverAlgorithm {
public:
	PathSolverAlgorithm();
	virtual ~PathSolverAlgorithm();
	virtual Path* solvePath(Vertex* origin, Vertex* destiny,
			LinkedList<Vertex>* vertices, LinkedList<Edge>* edges)
			throw (OutOfReachException) = 0 ;
	// XXX no me gusta esto, pero si no tengo que ver de exponer EdgeCost y no me parece que sea responsabilidad de
	// un pathSolver determinar los costos ni exponer un #getCost():EdgeCost;
	virtual double cost(Edge* edge) = 0;
};

}
#endif /* PATHSOLVERALGORITHM_H_ */
